<やってみた> FirebaseとAWS API Gatewayで認証
概要
設計や動作はなんとなく把握してるので、それ以上に理解を深めるためにやってみる。
現状の感想
最初のうちはAPI Gatewayに認証させずとも、app内で直接認証させる方が簡単で使いやすいと感じた。
コンポーネントが増えるとその分だけ複雑度は増すので、最初のうちはAPI GatewayのAuthorizerは必要ないかなって感じ。
詰まりポイント
Lambda Layerを作るのは少し面倒くさい
AuthorizerのIDソースで指定されてる情報をちゃんとリクエスト時に与えないと弾かれる
デフォルトで$request.header.Authorizationが指定されてる。
これはリクエストヘッダーにAuthorizationを付与しないとリクエストがAPI Gatewayから弾かれる。
--header 'authorization: abc'
Authorizerの返り値はversion1と2の2つあり、2の方がめっちゃシンプルで使いやすい
作業ログ
まずはAPI Gateway(HTTP)を作成
次にLambda関数を作成(デフォルトで)
そしてAPI Gatewayに新しくGETメソッドでルートを追加
ルートのバックエンドリソース(統合)にLambdaを設定
一旦、pathにHTTPリクエストして正常に動くか確認
正常に動いた
次にFirebase Authentication
なんか資料読んでると頭が混乱してきたので一旦勉強を挟む
おけ、ようやく色々理解しやすい状態になってきた気がする
現状はHTTPリクエストしたらちゃんと返ってくる状態よな
じゃあ次は、Authorizerを入れてみようか
トークン検証用のLambdaを作成しよう
の前にfirebase-adminを格納するLambda Layerを作成しよう(言語はpython)
オーソライザーの設定がいまいちわからんのでpythonの参考
詰まりポイント!!!
1. AuthorizerのIDソースで指定されてる情報をちゃんとリクエスト時に与えないと弾かれる
デフォルトで$request.header.Authorizationが指定されてる。
これはリクエストヘッダーにAuthorizationを付与しないとリクエストがAPI Gatewayから弾かれる。
2. Authorizerの返り値はversion1と2の2つあり、2の方がめっちゃシンプルで使いやすい
まあなんだかんだできたわ。よしよし。
参考
所感
認証をAPI Gatewayでやるんは、ちょっと難しいかもなと感じた
Authorizerで認証した時、その認証したユーザーのIDを後続のLambdaとかに渡したいんだが...
どう上手いこと渡すかが少し不明
例えば、FastAPIなどのフレームワークに対して、ユーザーIDをどう渡すのだろうか...
FastAPIはそれっぽい機能を用意してそうだ
Mangumの公式ドキュメントにも書いてるわ
これを使えば、UserIDとかを渡せるな、うん。
hr.icon
思考
普通にAPI用のLambda関数を作ろう。デフォルトでいいや。
疑問
Authorizerで解析した後、API Gateway内でリダイレクト的なのできないのか?
リダイレクトというかURLのリクエスト先を変更というか